# ##############################
from chiori import Config, Logger
from random import randrange
import os
# ##############################

class Player:
	"""docstring for Profile"""
	def __init__(self, uid):
		super(Player, self).__init__()
		self.uid = uid
		self.l = Logger(f'[pr: {self.uid}]')

		self.profile = Config(None, filepath=f'data/minigame/profiles/{self.uid}.toml')
		self.__dict__.update(self.profile.file_data)
		self.game = Config(None, filepath=f'data/minigame/game.toml')


	def save(self):
		self.profile.save()


	def update(self):
		self.save()
		self.__dict__.update(self.profile.file_data)


	def reg(self, nick=None):
		"""создаёт новый профиль, если они не были созданы
		:param nick: первоначальное имя персонажа"""

		print(self.profile)
		if not self.profile.file_data:
			hp = randrange(5, 20)
			mana = randrange(100)
			mc = randrange(10)
			self.profile.file_data = {
			'nick':nick or self.uid,
			'log':['~' for x in range(10)],
			'cast_buffer':[],
			'effects':[],
			'coins':100,
			'enemy':{},
			'weapon':{},
			'armor':0,

			'hp':hp,
			'max_hp':hp,
			'hp_regen':1,

			'mana':mana,
			'max_mana':mana,
			'mana_regen':5,
			'mana_cast': mc,

			'xp':0,
			'lvl':0,

			'inventory':[],
			'materials':{},
			'property':{},
			'config':{}}
			self.save()
			return 'Добро пожаловать в чудный мир.'
		else:
			return 'что вы задумали?'


	def log(self, text):
		"""записывает сообщение во внутренний буфер профиля
		: param text :  текст сообщения"""
		temp = self.profile.file_data
		date = self.game.file_data['date']

		print(temp['profile']['log'])
		temp['profile']['log'].pop(0)
		temp['profile']['log'].append(f'[{date[2]}/{date[3]}:{date[4]}] {text}')
		self.profile.file_data = temp
		print(self.profile.file_data)

		self.update()


	def level_up(self):
		text = ''
		target_xp = 15 * 2**self.lvl + 15

		if self.xp >= target_xp:
			self.profile.file_data["xp"] -= target_xp
			self.profile.file_data["lvl"] += 1
			self.update()
			text += f'\n[*] повышение уровня: {self.lvl-1} -> {self.lvl}'

		return text


	def add_xp(self, xp):
		"""метод добавления опыта к аккаунту
		:param xp: кол-во опыта"""

		self.profile.file_data["xp"] += xp
		text = f'[*] получено опыта: +{xp} {self.level_up()}'
		self.update()
		return text
